机器学习(Machine Learning)是计算机科学的一个方向。利用统计学的技巧,机器学习算法(Machine Learning Algorithms)能够自动学习并识别数据内的规律。凭着这些规律,算法便能作出高度准确的预测。
假设我们必须凭数据预测一栋房屋是位于纽约市还是旧金山市, 我们应该怎样开始呢?在机器学习中,这是一种分类任务。 (Classification Task)。 如果你到过旧金山,你可能会知道那里的地形是出了名的高低不平。所以不妨让我们从房屋的海拔入手,看看房屋的海拔信息能不能协助我们去区分它们。
让我们看看下边的海拔图表,一栋海拔73米以上的房屋应该是位于旧金山的。这是我们凭直觉能作的最初步预测。
多加一个维度(Dimension)能让我们发掘更多更细微的区别。例如,纽约的房屋每平米的价格往往要贵上许多。
因此我们在图中加上房屋样本的每平米单价,这样我们的图就变成了散点图,从而可以帮助我们在这些海拔低的房屋中做出区分。 凭着这些数据,我们可以作这样的预测:在海拔73米以下的房屋中,如果每平方米价格高过19117美元,那么房屋就是在纽约市的。
数据内的维度,在机器学习词汇内又称为特征(features),预报器(predictors),或变量(variable)。
我们可以把样本的海拔和每平米价格信息的画在散点图上。图上绿色(海拔73米以上)的部分将会归类为旧金山的。蓝色(每平米19117美元以上)的部分会归类为纽约市的。 这样凭着数据寻找合理的分界条件是统计学习和机器学习的本质。
可是,在左下角那些海拔低,平方米价格也低的房屋该怎么分类呢?我们要找多一点的维度数据了。
我们用来构建机器学习模型的房屋数据里共有七个维度。在机器学习中,建造模型的过程又称为训练模型(Model Training)。
在下边,我们给出一个散点图矩阵用来表示这些维度特征中两两之间的关系。 图上依稀可见数据里的规律。我们该怎样把模糊的规律变成准确的分界条件呢?
在数据里寻找规律就是机器学习的基础。所有的机器学习算法都是使用统计学习去快速地找到最佳的分界。
接下来我们将会介绍一种叫决策树的机器学习算法。决策树十分简单,它会逐一分析数据内的维度,从而去寻找分界线。
首先让我们重新审视房屋海拔数据,试试看能不能找到更好的分界方案。让我们尝试从一个新的角度来看。 把上面的海拔图转化成直方图能让我们发现更多数据中的规律。直方图中可以看到不同房屋海拔的数量。 在数据样本中,虽然纽约市海拔最高的房子在海拔73米。但是大多数的纽约房子都坐落在海拔较低的地方。
决策树使用二分类式的if-else条件作为分界条件。
比方说,如果一栋房子的海拔高于个数值,决策树就会判定这个房子位于旧金山。
在机器学习中,这些判断叫做分节点(fork),这些分节点把基于当前维度的某个数值,将数据样本分成两个分支。
两个分支之间的临界数值叫做切分点。房屋样本中小于临界数值的会被分向左边,大于临界数值的则会被分向右边。换言之,切分点实际上就是以决策树视角所看到的边界。
选择分节点时需要小心权衡。我们初选的分节点(海拔73米)把很多的旧金山的房子错误分类为纽约市的。
让我们看看上边那饼图绿色的部分,那些是被分错的了旧金山的房子。我们把这些分错的样本称作是伪阴性的(false negative)。
在最佳的切分点上,分类结果应该尽可能同质(或纯质)。统计学里有几种算法可以帮助我们寻找好的切分点。 如图所示,即便是在最佳的切分,我们还是不能避免错误的分类。我们该什么办呢?
我们可以使用递归的方法继续尝试。在第一个分支的两边分类结果内,每边再次加分支分类。递归地重复调用算法(recursion)是模型训练里常用的方法之一。 上边的一系列直方图显示着两边数据样本里每个维度上的数量。
新分支的最佳切分点会有所变化,这取决于具体的分支。 在上边海拔较低的部分,最佳的区分维度是每平方米价格,切分点的临界数值在11,420美元。在右边海拔较高的部分, 最佳的区分维度则是房子总值,切分点的临界数值在514,500美元。
更多的分支会给决策树增加新的信息,从而增强决策树的预测准确性。 加多一层,决策树的准确性增加到84%。 再加几层,准确性增加到96%。 我们甚至可以继续加分支直到决策树的分类正确率达到100%,这所有决策树末梢的分类结果会是纯粹旧金山或纽约市的,于是也即将两类房屋完全分开。 决策树的末节通常又叫做叶节点(leaf nodes)。决策树的预测取决于叶节点内哪一类的样本相对较多。
决策树是怎样作出预测的呢?我们的样本从根节点开始,跟着决策树分支的分叉顺序走到叶节点。叶节点是那一类,就预测那一类。每条路径构成了作出预测的规则。 在右边可视化图中,每一个样本都会流穿于决策树的决策规则而被最终分类。
这些数据叫做训练数据,因为决策树模型是是使用它们训练出来的。
决策树分类训练数据时的准确度当然是100%,因为很显然的原因是这棵决策树的模型原本就是从这些数据里训练出来的。
训练数据分类成功并不代表什么,真正的考验是要能对好从未见过的数据样本进行分类。
为了测试决策树的好坏,我们要用一些没有用过的数据进行分类实验。我们把这些没有用过的数据叫做测试数据(test data)。 如果我们的决策树够好的话,它在训练数据和测试数据的分类表现应该差不多。 这样看,我们的决策树就不算是做得很好了。
这些错误来自过拟合(overfitting)训练数据。因为我们的决策树把每一个训练样本中的每一点的细微差距,无论大小,全都作为了分界条件,甚至包括了一些实际上无关的信息。
参考资料: